/**
 * @file start.s
 * @author He Chuanxi(731682554@qq.com)
 * @brief I.MX6ULL 开发板启动文件，完成 C 语言环境初始化，C 环境初始化后跳转到 C 代码
 * @version 0.1
 * @date 2023-08-22
 * @note 初版
 * @copyright Copyright (c) 2023
 * 
 */
.global _start /* 全局标号 */

/**
 * @brief _start函数，程序从此函数开始执行，此函数主要功能是设置 C 语言运行环境
 */
_start:
    /* 进入 SVC 模式 */
    mrs r0, cpsr        /* 将 cpsr 程序状态寄存器的值读到 r0 中 */
    bic r0, r0, #0x1f   /* 将 r0 的低5位清零，也就是 cpsr 的 M0~M4 */
    orr r0, r0, #0x13   /* r0 或上 0x13,表示使用 SVC 模式 */
    msr cpsr, r0        /* 将 r0 的数据写入到 cpsr_c 中 */

    ldr sp, =0x80200000 /* 设置栈指针 */
    b main              /* 跳转到 main 函数 */
    
